#ifndef CAN_API_H
#define CAN_API_H

enum CAN_CHANNEL
{
	CAN_CH1 = 0,
	CAN_CH2 = 1
};

enum CAN_BOX
{
	CAN_BOX0 = 0,
	CAN_BOX1,
	CAN_BOX2,
};

enum {
    ACTION_CAN_RECV,
    ACTION_CAN_SEND,
};

struct canConfig
{
    int status; // 动作是否成功（由程序处理以后填充）
    int clearBuffWhenStart; // 打开盒子以后，是否清空已收到的报文
    int canBoxID; // 第几个CAN盒子， //设备索引号，如果接了俩个CAN盒子，那么就有2个devind，一个0，一个1
    enum CAN_CHANNEL canCh; // CAN 盒子通道
    int baundRate; // CAN 波特率
    int action; // 收还是发
    unsigned int canId; // 有关的CAN 帧ID
    int dataLen; // CAN 数据长度
    unsigned char datas[8];
};

int init_dll(void);
int can_box_ch_init(struct canConfig *config);

/*!
 *  @brief  发送数据到指定的通道
 *
 *  @param[in]  can_channel ： CAN 通道（一个CAN盒子有2个通道，一个1，一个2）
 *
 *  @param[in] ID ： CAN报文的ID
 *
 *  @param[in] data ： CAN报文的数据
 *  
 *  @param[in] sizec ： CAN报文的数据长度
 *  
 *  @return 返回值说明
 *
 */
int can_box_send_data_to_channel(enum CAN_CHANNEL can_channel, unsigned int id, unsigned char* data, int sizec);

/*!
 *  @brief  从指定的通道接受数据
 *
 *  @param[in]  can_channel ： CAN 通道（一个CAN盒子有2个通道，一个1，一个2）
 *
 *  @param[out] ID ： 收到的帧ID
 *
 *  @param[out] data ： 收到的帧数据
 * 
 *  @param[out] sizec ： 收到的帧大小
 *    
 *  @return 返回收到的帧数，未收到时
 *
 */
int can_box_recv_data_from_channel(enum CAN_CHANNEL can_channel, unsigned int *id, unsigned char* data, int *sizec);

void deinit_dll(void);



#endif // !CAN_API_H
